﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insifo.WE;
using System.Text.RegularExpressions;
using System.Collections.Specialized;


public partial class gcgContenidoSeccionEditar : ObjectPage
{
    #region CONSTANTES

    private const string RUTA_LISTA = "~/gcg/gcgContenidoSeccionListar.aspx";
    private const string RUTA_CONTENIDO = "~/gcg/gcgContenidoEditar.aspx";

    #endregion

    #region PROPIEDADES

    public bool Desactivar
    {
        get { return (hfDesactivar.Value == "1"); }
        set { hfDesactivar.Value = value ? "1": "0"; }
    }

    #endregion PROPIEDADES
    
    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuEditarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {            
            Cargar();
        }
    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Aceptar":
                Guardar("G");
                break;
            case "Aplicar":
                Guardar("A"); 
                break;
            case "Cancelar":
                Salir();
                break;
        }
    }

    #endregion

    #region METODOS

    protected void Cargar()
    {
        string strAccion =  Request.QueryString["a"];   //a: N-Nuevo, e-Editar, v-Ver
        string strId = Request.QueryString["i"];  //Id
        string strTab = Request.QueryString["t"];  //Id
        //Eventos Java Script
        this.Master.MenuAceptar.Attributes.Add("OnClick", "javascript:return fnValidar();");
        //Carga Aplicacion
        //Carga Estado
        Util.loadCombo(ddlEstado, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");
        Util.loadComboAndItem(ddlTipoSeccion, ListarParametroDetalle(1, UsuarioSistema.IdAplicacion, Constantes.PARAMETRO_TIPOSECCION), "Descripcion", "ParametroDetalle", "-- " + Resources.resDiccionario.Seleccione + " --", "");
        lnkGeneral.HRef = string.Format("#{0}", tabGeneral.ClientID);
        lnkContenido.HRef = string.Format("#{0}", tabContenido.ClientID);

        switch (strAccion)
        {
            case "n":
                Master.SubTitulo.Text =  Resources.resDiccionario.Nuevo;
                Nuevo();
                break;
            case "e":
                Master.SubTitulo.Text =  Resources.resDiccionario.Editar;
                Editar(strAccion, strId);
                break;
            case "d":
                Master.SubTitulo.Text =  Resources.resDiccionario.Inactivar;
                Editar(strAccion, strId);
                break;
            default:
               Master.SubTitulo.Text =  Resources.resDiccionario.Unknow;
                break;
        }

        if (!string.IsNullOrEmpty(strTab))
        {
            hfTabActivo.Value = strTab;
        }
    }

    protected void Nuevo()
    {
        hfIdSeccion.Value = "0";
        hfAccion.Value = "n"; //Nuevo
        txtCodigoSeccion.Text = string.Empty;
        txtDescripcion.Text = string.Empty;
        
        //Datos de Auditoria
        ddlEstado.SelectedIndex = 0; //Representa el primero
        txtUsuarioCreacion.Text = string.Empty;
        txtFechaCreacion.Text = string.Empty;
        txtUsuarioModificacion.Text = string.Empty;
        txtFechaModificacion.Text = string.Empty;
    }

    protected void Editar(string pstrAccion, string pstrIdSeccion)
    {

        WCContenidoSeccion.BEContenidoSeccion be = new WCContenidoSeccion.BEContenidoSeccion
        {
            IdSeccion = Int32.Parse(pstrIdSeccion)
        };
        be = ObtenerContenidoSeccion(be);

        hfIdSeccion.Value = pstrIdSeccion;
        hfAccion.Value = pstrAccion; //Editar/Eliminar
        txtCodigoSeccion.Text = be.CodigoSeccion;
        txtCodigoSeccion.Enabled = false;
        txtDescripcion.Text = be.Descripcion;
        Util.SelectCombo(ddlTipoSeccion, be.TipoSeccion);

        //Datos de Auditoria
        Util.SelectCombo(ddlEstado, be.Estado);
        txtUsuarioCreacion.Text = be.UsuarioCreacion;
        txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
        txtUsuarioModificacion.Text = be.UsuarioModificacion;
        txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

        if (pstrAccion == "d")
        {
            Master.MenuAplicar.Visible = false; //Remueve el boton aplicar
            this.Desactivar = true;
            txtDescripcion.Enabled = false;
            ddlTipoSeccion.Enabled = false;
            ddlEstado.Enabled = false;

            if (be.Estado == Constantes.ESTADO_ACTIVO)
            {
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_INACTIVO);
            }
            else
            {
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_ACTIVO);
            }
        }

        //Listar Contenidos
        ListarContenidos();
    }

    protected bool Validar(out WCContenidoSeccion.BEContenidoSeccion pbe)
    {
        pbe = new WCContenidoSeccion.BEContenidoSeccion();
        string strDescripcion = string.Empty, strIdMenu = string.Empty;
        string strUsuario = string.Empty, strEstado = string.Empty, strIdAplicacion = string.Empty;
        string strAccion = string.Empty;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver

        strDescripcion = txtDescripcion.Text.Trim();
        strEstado = ddlEstado.SelectedValue;
        strUsuario = UsuarioSistema.CodigoUsuario;

        //Inicializa
        WCContenidoSeccion.BEContenidoSeccion be = new WCContenidoSeccion.BEContenidoSeccion
        {
            IdSeccion = Int32.Parse(hfIdSeccion.Value),
            CodigoSeccion = txtCodigoSeccion.Text.Trim(),
            Descripcion = strDescripcion,
            TipoSeccion = ddlTipoSeccion.SelectedValue,
            Estado = strEstado,
            UsuarioCreacion = strUsuario,
            FechaCreacion = DateTime.Now,
            UsuarioModificacion = strUsuario,
            FechaModificacion = DateTime.Now
        };
        pbe = be;
        return true;
    }

    protected void Guardar(string pstrEvento) //G:Grabar, A:Aplicar
    {
        string strAccion = string.Empty;
        string strUsuario = string.Empty;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver
        strUsuario = UsuarioSistema.CodigoUsuario;

        WCContenidoSeccion.BEContenidoSeccion be;
         
        if (!Validar(out be)) //Valida e Inicializa
        {
            return;
        }

        //Grabar
        switch (strAccion)
        {
            case "n": //Nuevo
                be = InsertarContenidoSeccion(be);
                if (be.Error != 0)
                {
                    if (be.Error == -2)
                    {
                        Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgAlertaCodigoYaExiste));
                    }
                    else
                    {
                       Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorRegistrar));
                    }
                }
                else
                {
                    hfAccion.Value = "e";
                    hfIdSeccion.Value = be.IdSeccion.ToString();
                    txtUsuarioCreacion.Text = strUsuario;
                    txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                    txtUsuarioModificacion.Text = strUsuario;
                    txtFechaModificacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                }
                
                break;
            case "e": //Actualiza
                be = ActualizarContenidoSeccion(be);
                if (be.Error != 0)
                {
                    if (be.Error == -2)
                    {
                        Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgAlertaCodigoYaExiste));
                    }
                    else
                    {
                        Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorActualizar));
                    }
                }
                else
                {
                    txtUsuarioModificacion.Text = strUsuario;
                    txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);
                }
                break;
            case "d": //Elimina
                be = EliminaContenidoSeccion(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorActualizar));
                }
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

               
                break;
        }
        if (pstrEvento == "G") //Si es GRABAR redirecciona a la Lista
        {
            if (be.Error == 0)
            {
                Salir();
            }
        }
    }

    protected void Salir()
    {
        string strCadena = string.Format("?a=l&param1={0}", Request.QueryString["param1"]);
        Util.Redireciona(RUTA_LISTA, strCadena, true);
    }
    
    #endregion

    #region TAB ContenidoS

    protected void ibtNuevoContenido_Click(object sender, ImageClickEventArgs e)
    {
        NuevoContenido();
    }

    protected void lvContenido_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        ContenidoOperacion(e.CommandName, e.Item);
    }

    protected void lvContenido_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        BoundContenido(e.Item);
    }

    protected void ListarContenidos()
    {
        DataTable dt = null;
        dt = ListarContenidosPorSeccion(int.Parse(hfIdSeccion.Value));

        lvContenido.DataSource = dt;
        lvContenido.DataBind();
    }

    protected void NuevoContenido()
    {
       
    }

    protected void ContenidoOperacion(string pstrComando, ListViewItem plviObj)
    {
        switch (pstrComando)
        {
            case Constantes.ACCION_EDITAR:
                EditarContenido(plviObj);
                break;
        }
    }

    protected void EliminarContenido(ListViewItem plceArg)
    {

    }

    protected void EditarContenido(ListViewItem plceArg)
    {
        HiddenField hfDetalleItemIdContenido = (HiddenField)plceArg.FindControl("hfDetalleItemIdContenido");
        string strCadena = string.Format("?a={0}&i={1}&as={2}&is={3}&param1={4}", "e", hfDetalleItemIdContenido.Value, hfAccion.Value, hfIdSeccion.Value, Request.QueryString["param1"]);
        Util.Redireciona(RUTA_CONTENIDO, strCadena, true);
    }


    protected void BoundContenido(ListViewItem plceArg)
    {
        if (this.Desactivar)
        {
            ImageButton ibt;
            if (plceArg.ItemType == ListViewItemType.DataItem)
            {
                ibt = (ImageButton)plceArg.FindControl("ibtEditarItemContenido");
                ibt.Visible = false;
            }
        }
    }

   

    #endregion TAB CONTENIDO


    #region LLAMDAS A WEBSERVICES

    /// <summary>
    /// Método Lista Niveles de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCContenidoSeccion.BEContenidoSeccion InsertarContenidoSeccion(WCContenidoSeccion.BEContenidoSeccion pbe)
    {
        WCContenidoSeccion.BEContenidoSeccion be = new WCContenidoSeccion.BEContenidoSeccion();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCContenidoSeccion.IWCContenidoSeccion>("BasicHttpBinding_IWCContenidoSeccion"))
        {
            var response = client.ServiceOperation<WCContenidoSeccion.BEContenidoSeccion>(c => c.Insertar(pbe));
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Obtiene Nivel de Alerta
    /// </summary>
    /// <returns>Devuelve un Objeto</returns>
    protected WCContenidoSeccion.BEContenidoSeccion ObtenerContenidoSeccion(WCContenidoSeccion.BEContenidoSeccion pbe)
    {
        WCContenidoSeccion.BEContenidoSeccion be = new WCContenidoSeccion.BEContenidoSeccion();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCContenidoSeccion.IWCContenidoSeccion>("BasicHttpBinding_IWCContenidoSeccion"))
        {
            var response = client.ServiceOperation<WCContenidoSeccion.BEContenidoSeccion>(
               c => c.Obtener(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Actualiza un Nivele de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCContenidoSeccion.BEContenidoSeccion ActualizarContenidoSeccion(WCContenidoSeccion.BEContenidoSeccion pbe)
    {
        WCContenidoSeccion.BEContenidoSeccion be = new WCContenidoSeccion.BEContenidoSeccion();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCContenidoSeccion.IWCContenidoSeccion>("BasicHttpBinding_IWCContenidoSeccion"))
        {
            var response = client.ServiceOperation<WCContenidoSeccion.BEContenidoSeccion>(
               c => c.Actualizar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Elimina un Nivele de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCContenidoSeccion.BEContenidoSeccion EliminaContenidoSeccion(WCContenidoSeccion.BEContenidoSeccion pbe)
    {
        WCContenidoSeccion.BEContenidoSeccion be = new WCContenidoSeccion.BEContenidoSeccion();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCContenidoSeccion.IWCContenidoSeccion>("BasicHttpBinding_IWCContenidoSeccion"))
        {
            var response = client.ServiceOperation<WCContenidoSeccion.BEContenidoSeccion>(
               c => c.Eliminar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Lista Menus
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarContenidoSeccion()
    {
        WCContenidoSeccion.BEContenidoSeccion be = new WCContenidoSeccion.BEContenidoSeccion();
        be.Descripcion = "";
        be.Estado = "A";
        be.Pagina = 0;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCContenidoSeccion.IWCContenidoSeccion>("BasicHttpBinding_IWCContenidoSeccion"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.Listar(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Companias
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    protected DataTable ListarAplicacion()
    {
        DataTable dt = new DataTable();
        //WCAplicacion.BEAplicacion beAp = new WCAplicacion.BEAplicacion();
        //beAp.IdSuit = 0;
        //beAp.Descripcion = string.Empty;
        //beAp.Estado = "A";
        //beAp.Pagina = 0;
        using (var client = new ServiceClient<WCAplicacion.IWCAplicacion>("BasicHttpBinding_IWCAplicacion"))
        {
            var response = client.ServiceOperation<DataTable>(
                c => c.Listar().Tables[0]
                    );
            ;
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Niveles de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected DataTable ListarContenidosPorSeccion(int pinIdSeccion)
    {
        WCContenido.BEContenido be = new WCContenido.BEContenido() { IdSeccion = pinIdSeccion };
        DataTable dt = null;
        using (var client = new ServiceClient<WCContenido.IWCContenido>("BasicHttpBinding_IWCContenido"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.ListarPorSeccion(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Niveles de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCContenido.BEContenido InsertarContenido(WCContenido.BEContenido pbe)
    {
        WCContenido.BEContenido be = new WCContenido.BEContenido();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCContenido.IWCContenido>("BasicHttpBinding_IWCContenido"))
        {
            var response = client.ServiceOperation<WCContenido.BEContenido>(c => c.Insertar(pbe));
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Actualiza un Nivele de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCContenido.BEContenido ActualizarContenido(WCContenido.BEContenido pbe)
    {
        WCContenido.BEContenido be = new WCContenido.BEContenido();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCContenido.IWCContenido>("BasicHttpBinding_IWCContenido"))
        {
            var response = client.ServiceOperation<WCContenido.BEContenido>(
               c => c.Actualizar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Elimina un Nivele de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCContenido.BEContenido EliminarContenido(WCContenido.BEContenido pbe)
    {
        WCContenido.BEContenido be = new WCContenido.BEContenido();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCContenido.IWCContenido>("BasicHttpBinding_IWCContenido"))
        {
            var response = client.ServiceOperation<WCContenido.BEContenido>(
               c => c.Eliminar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }


    protected DataTable ListarAplicaciones()
    {

        WCAplicacion.BEAplicacion be = new WCAplicacion.BEAplicacion();
        be.Estado = "A";

        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCAplicacion.IWCAplicacion>("BasicHttpBinding_IWCAplicacion"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar().Tables[0]);
            dt = response;
        }
        return dt;
    }
    #endregion



}